/**
 * @desc 用户表
 */
import { Column, DataType, Model, Table, CreatedAt, UpdatedAt, HasMany } from 'sequelize-typescript';
import { Oauth } from './oauth';
@Table({
  // 放配置的属性
  modelName: 'user',
})
export class User extends Model<User> {

  @Column({
    // 放字段的配置属性 例如唯一的
    type: DataType.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    unique: true,
    allowNull: false,
    comment: '用户ID',
  })
  id: number;

  @Column({
    type: DataType.STRING(255),
    allowNull: true,
    unique: true,
    comment: '名称',
  })
  name: string;

  @Column({
    type: DataType.STRING(255),
    allowNull: true,
    unique: true,
    comment: '用户姓名',
    validate: {
      is: /^[A-Za-z0-9\-]{6,}$/,
    },
  })
  username: string;

  @Column({
    type: DataType.STRING(255),
    allowNull: true,
    unique: true,
    comment: '用户邮箱',
    validate: {
      isEmail: true,
    },
  })
  email: string;

  @Column({
    type: DataType.STRING(255),
    allowNull: true,
    unique: true,
    comment: '用户手机',
    validate: {
      is: /^1[3456789]\d{9}$/,
    },
  })
  phone: string;

  @Column({
    type: DataType.STRING(255),
    allowNull: false,
    unique: true,
    comment: '用户密码',
  })
  password: string;

  @Column({
    field: 'user_state',
    type: DataType.BOOLEAN,
    allowNull: true,
    unique: false,
    comment: '用户是否可用',
  })
  userState: boolean;

  @Column({
    type: DataType.BOOLEAN,
    allowNull: true,
    unique: false,
    comment: '是否绑定授权账户',
  })
  github: boolean;

  @Column({
    type: DataType.BOOLEAN,
    allowNull: true,
    unique: false,
    comment: '是否本地注册',
  })
  local: boolean;

  @Column({
    field: 'avatar_url',
    type: DataType.STRING,
    allowNull: true,
    unique: false,
    comment: '用户头像',
    // 可以使用 get 方法来拼接好图片的完整地址返回
    // get() {
    //   const rawValue = this.getDataValue('avatarURL');
    //   return rawValue ? 'http://127.0.0.1:7001' + rawValue : null;
    // },
  })
  avatarURL: string;

  // 可以生成一个虚拟的字段 让前端可以拼接成完整的地址
  @Column({
    // 虚拟字段
    type: DataType.VIRTUAL,
    get() {
      return 'http://127.0.0.1:7001';
    },
  })
  baseURL:string;

  @HasMany(() => Oauth) // 拥有OAuth表中的外键
  oauths: Oauth[];

  @CreatedAt // 设置时间戳 sets timestamps=true and createdAt='creationDate'
  createdAt: Date;

  @UpdatedAt // 设置时间戳 sets timestamps=true and updatedAt='updatedOn'
  updatedAt: Date;
}
export default () => User;
